package NDO::TinyURL::Controller::Root;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller' }

#
# Sets the actions in this controller to be registered with no prefix
# so they function identically to actions created in MyApp.pm
#
__PACKAGE__->config(namespace => '',
    templates => {
        index => 'templates/index.tt',
        make  => 'templates/make.tt',
    }
);

=head1 NAME

NDO::TinyURL::Controller::Root - Root Controller for NDO::TinyURL

=head1 DESCRIPTION

[enter your description here]

=head1 METHODS

=head2 index

The root page (/)

=cut

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    # Hello World
    $c->response->body( $c->welcome_message );
}

=head2 default

Standard 404 error page

=cut

sub default : Private {
    my ( $self, $c ) = @_;
    $c->stash->{template} = NDO::TinyURL->config->{templates}->{index};
    $c->forward('NDO::TinyURL::View::TT');
}

sub index : Private {
    my ( $self, $c ) = @_;
    $c->stash->{template} = NDO::TinyURL->config->{templates}->{index};
    $c->forward('NDO::TinyURL::View::TT');
}

sub make : Global {
    my ( $self, $c ) = @_;
    my $url = $c->req->param('url') or $c->res->redirect('/');
    $url = 'http://' . $url unless $url =~/^http(?s):\/\//i;
    my $map = NDO::TinyURL::Model::CDBI::Urlmap->find_or_create({ url => $url });
    $c->stash->{map} = $map;
    $c->stash->{template} = NDO::TinyURL->config->{templates}->{make};
    $c->forward('NDO::TinyURL::View::TT');
}

sub redirect : Regex('^(\d+)$') {
    my ( $self, $c ) = @_;
    my $map = NDO::TinyURL::Model::CDBI::Urlmap->retrieve($c->req->snippets->[0]);
    $map ? $c->res->redirect($map->url) : $c->res->redirect('/');
}

=head2 end

Attempt to render a view, if needed.

=cut

sub end : ActionClass('RenderView') {}

=head1 AUTHOR

cai.yuxuan,,,

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

__PACKAGE__->meta->make_immutable;

1;
